import { IPageList, IPageListParameter } from '@/types/global'
import { DataTableColumn } from 'naive-ui'
import { MaybeRef, Ref } from 'vue'

type Column<T> = DataTableColumn<T> & {
    key: keyof T | '_actions' | '_selection'
}

export type TableConfig<T> = {
    // 接口
    service?: (params: any) => Promise<T[]>

    // 参数
    params: MaybeRef<any>

    // ready
    ready?: Ref<boolean> | (() => boolean)

    // 自动请求
    auto?: boolean

    // 列设置
    columns: Column<T>[]
}

export type TablePaginationConfig<T> = {
    // 接口
    service: (params: IPageListParameter<unknown>) => Promise<IPageList<T[]>>

    // 参数
    params?: IPageListParameter | Ref<IPageListParameter>

    // 自动请求
    auto?: boolean

    // 列设置
    columns: Column<T>[]
}
